package thread;

import java.util.concurrent.Semaphore;

/**
 * Created with IntelliJ IDEA.
 * Description:
 * User: 刘远望
 * Date: 2025-06-05
 * Time: 21:56
 */
//信号量
public class Demo42 {
    public static void main(String[] args) throws InterruptedException {
        //创建一个信号量，初始值为3
        Semaphore semaphore = new Semaphore(3);
        /**
         * 信号量的一个特殊情况初始值为1的信号量，就是互斥锁， (普通的信号量就相当于锁的更广泛的推广)
         * 如果是普通的N的信号量，就可以限制，同时有多少个线程来执行某个逻辑
         *
         */

        semaphore.acquire(); //获取一个许可
        System.out.println(Thread.currentThread().getName() + "获得许可");
        semaphore.acquire();
        System.out.println(Thread.currentThread().getName() + "获得许可");
        semaphore.acquire();
        System.out.println(Thread.currentThread().getName() + "获得许可");

        semaphore.acquire();//这里会阻塞，因为信号量的初始值为3，已经达到最大值，再获取一个许可就会阻塞
        System.out.println(Thread.currentThread().getName() + "获得许可");
    }
}
